home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48hor2 / analemma.doc < prev    next >
Text File  |  1995-03-31  |  10KB  |  272 lines

  1. (Comp.sys.hp48) 
  2. Item: 574 by fin@unet.umn.edu 
  3. Author: [Craig A. Finseth] 
  4.   Subj: Analemma program for 48SX, 48S 
  5.   Date: Fri Feb 07 1992 
  6.  
  7. Craig A. Finseth                                 fin@unet.umn.edu 
  8. 1343 Lafond                                      Craig.Finseth@nic.mr.net 
  9. St Paul MN 55104-2437                            +1 612 644 4027 
  10. USA 
  11.  
  12. 14 January 1992 
  13.  
  14. What it does: 
  15.  
  16. Many globes show a large "figure 8" somewhere over the Pacific Ocean. 
  17. (Oddly, this figure does not show on photographs taken from space...)  
  18. This figure is called an "analemma," and it shows the position of the 
  19. Sun (in degrees of declination and minutes of right ascention (that 
  20. is, minutes as in "hours and minutes" not "degrees and minutes")) 
  21. relative to "where it is supposed to be." 
  22.  
  23. For example, on May 14, the Sun is about 3 minutes and 41 seconds 
  24. ahead of nominal and about 20 degrees north of the ecliptic. 
  25.  
  26. I said "many globes" because some manufacturers are removing this 
  27. useful piece of information from their globes. This program makes up 
  28. for this loss (as well as providing an excuse to write a program). 
  29.  
  30. This program uses the graphics capabilities of the 48S/48SX to draw an 
  31. analemma for the year 2000. 
  32.  
  33. The equations used are from: 
  34.  
  35.           Meeus, Jean (1991) Astronomical Algorithms.  Richmond, 
  36.           Virginia: Willmann-Bell.  ISBN 0-943396-35-2. 
  37.  
  38. In many cases, the definitions for the functions in this program give 
  39. equation numbers from this text. 
  40.  
  41. Note: the shape on an analemma varies over time.  Also, an analemma is 
  42. *not* symmetric about the origin along either axis. 
  43. ------------------------------------------------------------ 
  44. Basic Operation: 
  45.  
  46. Execute "GO".  Wait and watch. 
  47.  
  48. When complete, you can enter the graphics environment and use the 
  49. cursor and COORD to identify the position in decimal minutes of right 
  50. ascention and degrees of declination. 
  51.  
  52. The program operates in four phases: 
  53.  
  54. 1) Clear the screen and draw the grid (declination lines of -20, -10, 
  55.    0, 10, and 20 degrees and a right ascention line of 0 degrees). 
  56.  
  57. 2) Draw the analemma curve.  Points are calculated every five days and 
  58.    a line is drawn connecting the points. 
  59.  
  60. 3) Draw the tick marks.  These are drawn the first of every month and 
  61.    21 Mar, 20 Jun, 21 Sep, and 20 Dec.  February is assumed to have 28 
  62.    days. 
  63.  
  64. 4) Draw the labels. 
  65.  
  66. The program objects all communicate via global variables.  Each 
  67. program uses those globals that it needs and stores its result in its 
  68. own global variable. 
  69.  
  70. Because of these dependencies, the programs must be executed in the 
  71. following order: 
  72.  
  73.           FIGJD 
  74.           FIGT 
  75.           FIG░ 
  76.           FIGî 
  77.           FIGL0     anytime after FIGT 
  78.           FIGà 
  79.           FIGE 
  80.           FIGë      anytime after FIGT 
  81.  
  82. While FIGL0 may be computed anytime after FIGT, FIGà and FIGE 
  83. (indirectly) must be computed after FIGL0. 
  84.  
  85. As it turned out, this structure made it very easy to test the 
  86. modules.  A test Julian Day could be stored in JD, then the other 
  87. program calculated and their results examined. 
  88.  
  89. The programs can, of course, be used separately. 
  90. ------------------------------------------------------------ 
  91. Accuracy: 
  92.  
  93. The program calculates the analemma for the year 2000.  While the 
  94. analemma does vary over time, the variation is not much and the 
  95. displayed shape wouldn't change for a couple of centuries on each side 
  96. of the target year. 
  97.  
  98. Most of the programs assume this range of time.  Higher-order terms 
  99. are not included in the programs, but could be added with minimal 
  100. effort. 
  101.  
  102. The horizontal axis is "magnified" by a factor of four.  If you wish 
  103. to change this magnification, you will need to edit: 
  104.  
  105.           PPAR      to set new limits 
  106.           FRAME     to set horizontal endpoints 
  107.           LBL       to position the labels 
  108.  
  109. If you don't care about the lines and labels, you can drop the 
  110. invocations from GO and simply edit PPAR.  Then replot. 
  111.  
  112. Internal computations are all performed in decimal degrees.  Where a 
  113. computation may result in a number of degrees significantly in excess 
  114. of 360, the value is taken mod 360 before being stored. 
  115. ------------------------------------------------------------ 
  116. Object Summary:      
  117.  
  118. GO        runs the program 
  119. BASE      computes the basic analemma 
  120. E         global variable: result variable for the equation of time 
  121. FIGE      computes E 
  122. FIGJD     computes the Julian Day 
  123. FIGL0     computes L0 
  124.  
  125. FIGT      computes T 
  126. FIGà      computes à 
  127. FIG░      computes ░î and ░p 
  128. FIGë      computes ë 
  129. FIGî      computes î 
  130. FRAME     displays the frame 
  131.  
  132. JD        global variable: current Julian Day 
  133. L0        global variable: longitude of the Sun 
  134. LBL       displays the month labels     
  135. PLACE     computes the coordinates for a day 
  136. PPAR      global variable: plotting parameters 
  137. T         global variable: current Julian Century 
  138.  
  139. TICK      places month tick marks 
  140. à         global variable: apparent Solar right ascention 
  141. ░î        global variable: nutation in obliquity 
  142. ░p        global variable: nutation in longitude (p should be psi) 
  143. ë         global variable: Solar declination 
  144. î         global variable: obliquity of the ecliptic 
  145. ------------------------------------------------------------ 
  146. Detailed Interfaces: 
  147.  
  148. GO        Stack Input:        none 
  149.           Stack Output:       none 
  150.           Global Input:       none 
  151.           Global Output:      none 
  152.           Calls:              BASE, FRAME, LBL, TICK 
  153.  
  154.           Saves the flags, sets degrees mode, clears and displays the 
  155.           PICT, draws the figure, restores the flags. 
  156.  
  157. BASE      Stack Input:        none 
  158.           Stack Output:       none 
  159.           Global Input:       none 
  160.           Global Output:      none 
  161.           Calls:              PLACE 
  162.  
  163.           Plots the basic analemma. 
  164.  
  165. FIGE      Stack Input:        none 
  166.           Stack Output:       none 
  167.           Global Input:       L0, à, ░p, î 
  168.           Global Output:      E 
  169.           Calls:              none 
  170.  
  171.           Computes the equation of time (equation 27.1). 
  172.  
  173. FIGJD     Stack Input:        day number within year (21 Mar = 0) 
  174.           Stack Output:       none 
  175.           Global Input:       none 
  176.           Global Output:      JD 
  177.           Calls:              none 
  178.  
  179.           Computes the Julian Day 
  180.  
  181. FIGL0     Stack Input:        none 
  182.           Stack Output:       none 
  183.           Global Input:       T 
  184.           Global Output:      L0 
  185.           Calls:              none 
  186.  
  187.           Computes the Sun's mean longitude (equation 27.2). 
  188.  
  189. FIGT      Stack Input:        none 
  190.           Stack Output:       none 
  191.           Global Input:       JD 
  192.           Global Output:      T 
  193.           Calls:              none 
  194.  
  195.           Computes the Julian Century (equation 21.1).  The origin is 
  196.           1 Jan 2000. 
  197.  
  198. FIGà      Stack Input:        none 
  199.           Stack Output:       none 
  200.           Global Input:       L0, T, î 
  201.           Global Output:      à 
  202.           Calls:              none 
  203.  
  204.           Computes the *apparent* Solar right ascention (equations 24.3, 
  205.           both unnumbered between 24.4 and 24.5 ("OD" refers to the 
  206.           circle with dot varaible), first two unnumbered between 24.5 
  207.           and 24.6, 24.6, and 24.8). 
  208.  
  209. FIG░      Stack Input:        none 
  210.           Stack Output:       none 
  211.           Global Input:       T 
  212.           Global Output:      ░î, ░p 
  213.           Calls:              none 
  214.  
  215.           Computes the nutation in longitude (░p, p should be psi) and 
  216.           nutation in obliquity (î) (the accuracy of 0.5 minutes 
  217.           equations on page 132). 
  218.  
  219. FIGë      Stack Input:        none 
  220.           Stack Output:       none 
  221.           Global Input:       T, î 
  222.           Global Output:      ë 
  223.           Calls:              none 
  224.  
  225.           Computes the Solar declination.  Uses simple first order 
  226.           approximation. 
  227.  
  228. FIGî      Stack Input:        none 
  229.           Stack Output:       none 
  230.           Global Input:       T 
  231.           Global Output:      î 
  232.           Calls:              none 
  233.  
  234.           Computes the mean obliquity of the ecliptic (equation 21.1). 
  235.  
  236. FRAME     Stack Input:        none 
  237.           Stack Output:       none 
  238.           Global Input:       none 
  239.           Global Output:      none 
  240.           Calls:              none 
  241.  
  242.           Plots the lines of declination (-20, -10, 0, 10, and 20 
  243.           degrees) and right ascention (0). 
  244.  
  245. LBL       Stack Input:        none 
  246.           Stack Output:       none 
  247.           Global Input:       none 
  248.           Global Output:      none 
  249.           Calls:              none 
  250.  
  251.           Plots the month name labels. 
  252.  
  253. PLACE     Stack Input:        day number within year (21 Mar = 0) 
  254.           Stack Output:       complex coordinate of analemma point for that day 
  255.           Global Input:       E, ë 
  256.           Global Output:      none 
  257.           Calls:              FIGE, FIGJD, FIGL0, FIGT, FIGà, FIG░ 
  258.                               FIGë, FIGî 
  259.           computes the coordinates for a day 
  260.  
  261. TICK      Stack Input:        none 
  262.           Stack Output:       none 
  263.           Global Input:       none 
  264.           Global Output:      none 
  265.           Calls:              PLACE 
  266.  
  267.           Plots the tick marks for the first of every month and 21 Mar, 
  268.           20 Jun, 21 Sep, and 20 Dec. 
  269.  
  270. Checksum: #c6deh 
  271. Size: 2859.5 
  272.